package cn.tedu.sp03.service;
import cn.tedu.sp01.pojo.User;
import cn.tedu.sp01.service.UserService;
import cn.tedu.web.util.JsonUtil;
import com.fasterxml.jackson.core.type.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
/*添加@RefreshScope注解,刷新到的配置信息数据,才会重新注入到这个对象*/
@RefreshScope
public class UserServiceImpl implements UserService {
    /*将配置文件里的json串形式的用户们的信息注入到这里*/
    @Value("${sp.user-service.users}")
    private String userJson;

    @Override
    public User getUser(Integer userId) {
        log.info("获取用户，userId="+userId);
        /*本操作试讲userJson --转换成--> List<User>list类型用户集合才能在java中使用
        * 单个类型可以直接写List<>.class,如果是嵌套类型,也就是有两个类型时,泛型不支持,
        * 就需要用到json的API  new TypeReference<List<User>>() {}创建一个匿名内部类父类
        * 中写这个嵌套类型的泛型*/
        List<User> list = JsonUtil.from(
                userJson, new TypeReference<List<User>>() {});

        /*在Demo中遍历每一个用户信息*/
        for (User u : list) {
            /*如果找到则返回用户数据*/
            if (u.getId().equals(userId)) {
                return u;
            }
        }

         /*如果上面找不到，这里写死一个用户数据并返回*/
        return new User(userId,"用户名"+userId, "密码"+userId);
    }

    @Override
    public void addScore(Integer userId, Integer score) {
        log.info("增加用户积分，userId="+userId+", score="+score);
    }
}
